/**
 * 纯蒙版引擎
 * 实现弹幕在人物区域完全透明（不阻挡），其他区域正常显示的效果
 */

import type { ActiveBarrage, DetectionArea } from '../../types'

export interface PureMaskConfig {
  /** 是否启用纯蒙版效果 */
  enabled: boolean
  /** 蒙版透明度 (0-1，0为完全透明，1为完全不透明) */
  maskOpacity: number
  /** 是否启用平滑边缘 */
  smoothEdges: boolean
  /** 平滑边缘的模糊半径 */
  blurRadius: number
}

export class PureMaskEngine {
  private config: PureMaskConfig = {
    enabled: true,
    maskOpacity: 0.0, // 完全透明，不阻挡人物
    smoothEdges: true,
    blurRadius: 5
  }

  constructor(config?: Partial<PureMaskConfig>) {
    if (config) {
      this.updateConfig(config)
    }
  }

  /**
   * 更新配置
   */
  updateConfig(config: Partial<PureMaskConfig>): void {
    this.config = { ...this.config, ...config }
    // console.log('🎭 纯蒙版配置已更新:', this.config)
  }

  /**
   * 获取当前配置
   */
  getConfig(): PureMaskConfig {
    return { ...this.config }
  }

  /**
   * 处理单个弹幕的纯蒙版效果
   * @param barrage 弹幕对象
   * @param detectionAreas 检测区域数组
   * @returns 弹幕的透明度 (0-1)
   */
  processBarrageMask(barrage: ActiveBarrage, detectionAreas: DetectionArea[]): number {
    if (!this.config.enabled || detectionAreas.length === 0) {
      return 1.0 // 正常显示
    }

    // 检查弹幕是否与任何检测区域重叠
    const isOverlapping = this.isBarrageOverlapping(barrage, detectionAreas)
    
    if (isOverlapping) {
      // 在人物区域内：使用蒙版透明度（通常为0，完全透明）
      return this.config.maskOpacity
    } else {
      // 在人物区域外：正常显示
      return 1.0
    }
  }

  /**
   * 批量处理弹幕的纯蒙版效果
   */
  processBarragesMask(barrages: ActiveBarrage[], detectionAreas: DetectionArea[]): void {
    if (!this.config.enabled) {
      // 重置所有弹幕的蒙版透明度
      barrages.forEach(barrage => {
        barrage.maskOpacity = 1.0
      })
      return
    }

    barrages.forEach(barrage => {
      barrage.maskOpacity = this.processBarrageMask(barrage, detectionAreas)
    })
  }

  /**
   * 检查弹幕是否与检测区域重叠
   */
  private isBarrageOverlapping(barrage: ActiveBarrage, areas: DetectionArea[]): boolean {
    const barrageLeft = barrage.x
    const barrageRight = barrage.x + barrage.width
    const barrageTop = barrage.y
    const barrageBottom = barrage.y + (barrage.fontSize || 24)

    return areas.some(area => {
      // 检查矩形重叠
      return !(barrageRight < area.left || 
               barrageLeft > area.right || 
               barrageBottom < area.top || 
               barrageTop > area.bottom)
    })
  }

  /**
   * 检查弹幕是否在影响范围内
   */
  isBarrageInInfluenceRange(barrage: ActiveBarrage, areas: DetectionArea[]): boolean {
    return this.isBarrageOverlapping(barrage, areas)
  }

  /**
   * 获取统计信息
   */
  getStats(): {
    enabled: boolean
    maskOpacity: number
    smoothEdges: boolean
    blurRadius: number
  } {
    return {
      enabled: this.config.enabled,
      maskOpacity: this.config.maskOpacity,
      smoothEdges: this.config.smoothEdges,
      blurRadius: this.config.blurRadius
    }
  }
}
